package lichtruong.bk.cse;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

	static InputStream is = null;

	static JSONObject jObj = null;

	static String json = "";

	public JSONParser() {

	}

	public JSONObject makeHttpRequest(String URL, String METHOD,
			List<NameValuePair> listDataRequest) {

		// making http request
		try {

			// check for request method
			// request method is POST
			if (METHOD == "POST") {

				// Construct the client
				DefaultHttpClient httpClient = new DefaultHttpClient();

				// Construct the HTTP request
				HttpPost httpPost = new HttpPost(URL);
				httpPost.setEntity(new UrlEncodedFormEntity(listDataRequest));

				// Execute the POST request and store the response locally.
				HttpResponse httpResponse = httpClient.execute(httpPost);

				// Extract data from the response.
				HttpEntity httpEntity = httpResponse.getEntity();

				// Open an inputStream with the data content.
				is = httpEntity.getContent();

			}

			// request method is GET
			else if (METHOD == "GET") {
				// Construct the client
				DefaultHttpClient httpClient = new DefaultHttpClient();
				String listDataRequestString = URLEncodedUtils.format(
						listDataRequest, "utf-8");
				URL += "?" + listDataRequestString;

				// Construct the HTTP request
				HttpGet httpGet = new HttpGet(URL);

				// Execute the POST request and store the response locally.
				HttpResponse httpResponse = httpClient.execute(httpGet);

				// Extract data from the response.
				HttpEntity httpEntity = httpResponse.getEntity();

				// Open an inputStream with the data content.
				is = httpEntity.getContent();
			}

		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					is, "iso-8859-1"), 8);
			StringBuilder sb = new StringBuilder();
			String line = null;
			while ((line = reader.readLine()) != null) {
				sb.append(line + "\n");
			}
			is.close();
			json = sb.toString();
		} catch (Exception e) {
			Log.e("Buffer Error", "Error converting result " + e.toString());
		}

		// try parse the string to a JSON object
		try {
			jObj = new JSONObject(json);
		} catch (JSONException e) {
			Log.e("JSON Parser", "Error parsing data " + e.toString());
		}

		return jObj;
	}

}
